Source for file SC_MobileKaraMail.php

Documentation is available at SC_MobileKaraMail.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  *
  23.  * 空メール受け付けアドレスのコマンド名とトークンの間の区切り文字
  24.  */
  25. define('MOBILE_KARA_MAIL_EXTENSION_DELIMITER''_');
  26.  
  27. /**
  28.  * モバイルサイトの空メールを扱うクラス
  29.  */
  30.     /**
  31.      * 環境変数から MTA を判別し、対応する SC_MobileKaraMail またはそのサブクラス
  32.      * のインスタンスを作成する。
  33.      *
  34.      * @return object SC_MobileKaraMail またはそのサブクラスのインスタンスを返す。
  35.      */
  36.     function &factory({
  37.         if (isset($_ENV['EXTENSION'])) {
  38.             $objInstance new SC_MobileKaraMail_Postfix;
  39.         elseif (isset($_ENV['DEFAULT'])) {
  40.             $objInstance new SC_MobileKaraMail_Qmail;
  41.         else {
  42.             $objInstance new SC_MobileKaraMail;
  43.         }
  44.  
  45.         return $objInstance;
  46.     }
  47.  
  48.     /**
  49.      * 標準入力からメールを読み込み、必要な情報を取得する。
  50.      *
  51.      * @return void 
  52.      */
  53.     function parse({
  54.         if (@$this->parsed{
  55.             return;
  56.         }
  57.  
  58.         require_once DATA_PATH '/module/Mail/mimeDecode.php';
  59.  
  60.         $fp fopen('php://stdin''r');
  61.  
  62.         // From 行を解析する。
  63.         $from_line rtrim(fgets($fp));
  64.         if (preg_match('/^From\\s+"?([^\\s"@]+)"?@([^\\s@]+)/'$from_line$matches)) {
  65.             $this->sender $matches[1'@' $matches[2];
  66.         else {
  67.             trigger_error("Invalid from line: $from_line");
  68.             $this->sender null;
  69.         }
  70.  
  71.         // 残りのヘッダーを解析する。
  72.         $data '';
  73.         while (!feof($fp)) {
  74.             $data .= fgets($fp);
  75.             if (rtrim($data"\r\n"== ''{
  76.                 break;
  77.             }
  78.         }
  79.         $structure Mail_mimeDecode::decode(array('input' => $data));
  80.         $this->recipient @$structure->headers['to'];
  81.  
  82.         // 宛先アドレスから拡張部分を取得する。
  83.         $pos strpos($this->recipientMOBILE_KARA_MAIL_ADDRESS_DELIMITER);
  84.         if ($pos !== false{
  85.             $extension_and_domain substr($this->recipient$pos 1);
  86.             $pos strpos($extension_and_domain'@');
  87.             if ($pos !== false{
  88.                 $this->extension substr($extension_and_domain0$pos);
  89.             else {
  90.                 $this->extension $extension_and_domain;
  91.             }
  92.         else {
  93.             trigger_error("Invalid recipient: {$this->recipient}");
  94.             $this->extension null;
  95.         }
  96.  
  97.         $this->parsed true;
  98.     }
  99.  
  100.     /**
  101.      * 配信が完了したことを示す終了ステータスでプログラムを終了する。
  102.      *
  103.      * @return void
  104.      */
  105.     function success() {
  106.         exit(0);
  107.     }
  108.  
  109.     /**
  110.      * 一時的なエラーを示す終了ステータスでプログラムを終了する。
  111.      *
  112.      * @return void
  113.      */
  114.     function temporaryFailure() {
  115.         exit(75);
  116.     }
  117.  
  118.     /**
  119.      * 送信者のメールアドレスを取得する。
  120.      *
  121.      * parse() 実行後に使用すること。
  122.      *
  123.      * @return string|false 送信者のメールアドレスを返す。取得できなかった場合は false を返す。
  124.      */
  125.     function getSender() {
  126.         return isset($this->sender) ? $this->sender : false;
  127.     }
  128.  
  129.     /**
  130.      * 宛先のメールアドレスの拡張部分からコマンド名を取得する。
  131.      *
  132.      * parse() 実行後に使用すること。
  133.      *
  134.      * @return string|false コマンド名を返す。取得できなかった場合は false を返す。
  135.      */
  136.     function getCommand() {
  137.         if (!isset($this->extension)) {
  138.             return false;
  139.         }
  140.  
  141.         $pos = strpos($this->extension, MOBILE_KARA_MAIL_EXTENSION_DELIMITER);
  142.         if ($pos === false) {
  143.             return false;
  144.         }
  145.  
  146.         return substr($this->extension, 0, $pos);
  147.     }
  148.  
  149.     /**
  150.      * 宛先のメールアドレスの拡張部分からトークンを取得する。
  151.      *
  152.      * parse() 実行後に使用すること。
  153.      *
  154.      * @return string|false トークンを返す。取得できなかった場合は false を返す。
  155.      */
  156.     function getToken() {
  157.         if (!isset($this->extension)) {
  158.             return false;
  159.         }
  160.  
  161.         $pos = strpos($this->extension, MOBILE_KARA_MAIL_EXTENSION_DELIMITER);
  162.         if ($pos === false) {
  163.             return false;
  164.         }
  165.  
  166.         return substr($this->extension, $pos + 1);
  167.     }
  168. }
  169.  
  170. /**
  171.  * モバイルサイトの空メールを扱うクラス (Postfix用)
  172.  */
  173. class SC_MobileKaraMail_Postfix extends SC_MobileKaraMail {
  174.     /**
  175.      * @see SC_MobileKaraMail::parse()
  176.      */
  177.     function parse() {
  178.         if (@$this->parsed) {
  179.             return;
  180.         }
  181.  
  182.         $this->sender = $_ENV['SENDER'];
  183.         $this->recipient = $_ENV['RECIPIENT'];
  184.         $this->extension = $_ENV['EXTENSION'];
  185.  
  186.         $this->parsed = true;
  187.     }
  188. }
  189.  
  190. /**
  191.  * モバイルサイトの空メールを扱うクラス (qmail用)
  192.  */
  193. class SC_MobileKaraMail_Qmail extends SC_MobileKaraMail {
  194. /**    
  195.      * @see SC_MobileKaraMail::parse()
  196.      */
  197.     function parse() {
  198.         if (@$this->parsed) {
  199.             return;
  200.         }
  201.  
  202.         $this->sender = $_ENV['SENDER'];
  203.         $this->recipient = $_ENV['RECIPIENT'];
  204.         $this->extension = $_ENV['DEFAULT'];
  205.  
  206.         $this->parsed = true;
  207.     }
  208.  
  209. /**    
  210.      * 一時的なエラーを示す終了ステータスでプログラムを終了する。
  211.      *
  212.      * @return void 
  213.      */
  214.     function temporaryFailure() {
  215.         exit(111);
  216.     }
  217. }

Documentation generated on Tue, 28 Apr 2009 18:13:34 +0900 by phpDocumentor 1.4.2